#include "Escena.h"

#include <glm\gtc\matrix_transform.hpp>


Escena::Escena() : 
	m_angulo_brazo(0.0f) , m_edificio(5), m_grua(10, 20),
	m_vecPosGrua(0.0f), m_vecPosEdificio(0.0f)
{
}


void Escena::init(const glm::vec3 &posFuenteLuzDireccional) {
	this->m_grilla.init();

	this->m_grua.init(posFuenteLuzDireccional, "LightShader.vert", "LightShader.frag");
	this->m_grua.setMaterial( glm::vec3(0.9f, 0.69f, 0.055f), glm::vec3(0.25f, 0.2f, 0.014f), glm::vec3(0.0f, 0.0f, 0.0f) );

	this->m_escombros.init(posFuenteLuzDireccional, "LightShader.vert", "LightShader.frag");
	this->m_escombros.setMaterial( glm::vec3(0.0f, 0.5f, 0.25f), glm::vec3(0.0f, 0.125f, 0.08f), glm::vec3(0.0f, 0.0f, 0.0f) );

	this->m_edificio.init(posFuenteLuzDireccional, "LightShader.vert", "LightShader.frag");
	this->m_edificio.setMaterial( glm::vec3(0.0f), glm::vec3(0.0f), glm::vec3(0.0f) );	// No importa los colores se setean en "piso"
}


void Escena::renderizar(const glm::mat4 &matVista, const glm::mat4 &matProyeccion, const glm::mat4 &matModelo) const {
	// La grilla da una idea de las ubicaciones
	glm::mat4 matModelGrilla = glm::scale( matModelo, glm::vec3(20.0f, 20.0f, 1.0f) );	// 20x20
	this->m_grilla.renderizar( matVista, matProyeccion, matModelGrilla );

	// El edificio con la lona al viento
	glm::mat4 matModelEdificio = glm::translate( matModelo, this->m_vecPosEdificio );
	this->m_edificio.renderizar( matVista, matProyeccion, matModelEdificio );

	// La grua a un lado del edificio
	glm::mat4 matModelGrua = glm::translate( matModelo, this->m_vecPosGrua );
	this->m_grua.renderizar( matVista, matProyeccion, matModelGrua );

	// Los monticulos con escombros
	this->m_escombros.renderizar(matVista, matProyeccion, matModelo);
}


void Escena::rotarBrazoGrua(float anguloGiro){
	this->m_angulo_brazo += anguloGiro;
	this->m_grua.rotarBrazo( this->m_angulo_brazo );
}


void Escena::setPosGrua(const glm::vec3 &vecPos) {
	this->m_vecPosGrua = vecPos;
}


void Escena::setPosEdificio(const glm::vec3 &vecPos) {
	this->m_vecPosEdificio = vecPos;
}



